package byteruneybxb

import (
	"fmt"
	"reflect"
)

// 测试字符串:
//
//	字符串和字节数值的相互转换：ToString: string(b); ToByte:[]byte(str)
func TestChar() {
	var str = "你好golang"
	// string转成rune数组
	var sRuneArr = []rune(str)
	// string转换成byte数组
	var sByteArr = []byte(str)
	// []byte比较重要，golang中的所有IO操作都是byte类型为单位。比如：网络IO,文件IO，json序列化。

	fmt.Println(reflect.TypeOf(sRuneArr)) // 打印结果：对应的类型是：[]int32
	fmt.Println(sRuneArr)
	// 打印结果：[20320 22909 103 111 108 97 110 103] # 前两个字20320 22909是UTF-8的编码, 前6个是英文字符的ASCII码，
	fmt.Println("字符串结果:" + string(sRuneArr))
	// 打印结果：字符串结果:hello中国
	fmt.Printf("\n----------------------------\n\n")
	fmt.Println(reflect.TypeOf(sByteArr)) // 对应的类型是：[]uint8 uint8的范围是：0~255
	fmt.Println(sByteArr)
	// 打印结果：[228 189 160 229 165 189 103 111 108 97 110 103] # 前面的"228 189 160 229 165 189"是每三个字符表示一个中文。后面6个是字符的ASCII码。
	fmt.Println("结果:" + string(sByteArr))
	// string(sByteArr): byte类型转换成字符串
}

func TestCharToString() {
	str := "中国人"
	sByteArr := []byte(str) // 字节类型的数组byte(0~255),等价于int8(0~127)
	fmt.Printf("类型:%T;值:%d\n", sByteArr, sByteArr)
	// 输出结果：[228 184 173 229 155 189 228 186 186]
	sRuneArr := []rune(str) // 是UTF8类型的字符，等价于int32()。
	fmt.Printf("类型:%T,值:%d", sRuneArr, sRuneArr)
	// 输出结果：[20013 22269 20154]
}
